package com.jielihaofeng.springboot.shorturl.generator;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;


public class AutoGeneratorCode {

    public static void main(String[] args) {
        // 创建代码自动生成器对象
        AutoGenerator autoGenerator = new AutoGenerator();
        // 配置代码生成器相关策略
        // 1.全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        String property = System.getProperty("user.dir");
        System.out.println("**************" + property);
        // 输出目录
        globalConfig.setOutputDir(property + "\\src\\main\\java");
        // 作者
        globalConfig.setAuthor("Johnnie Wind");
        // 是否打开目录
        globalConfig.setOpen(false);
        // 输出覆盖目录
        globalConfig.setFileOverride(true);
        //  %s 会自动填充表实体属性
        globalConfig.setServiceName("%sService");
        // 设置主键生成策略
        globalConfig.setIdType(IdType.ASSIGN_ID);
        // 实体属性swagger2注解开启
        globalConfig.setSwagger2(true);
        globalConfig.setBaseResultMap(true);

        // 添加全局配置
        autoGenerator.setGlobalConfig(globalConfig);

        // 2.配置数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        // 数据库连接地址
        dataSourceConfig.setUrl("jdbc:mysql://47.113.86.188:3306/shorturl?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8");
        // 数据库驱动
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        // 数据库账号
        dataSourceConfig.setUsername("root");
        // 数据库密码
        dataSourceConfig.setPassword("Hywzy571");
        // 数据库类型
        dataSourceConfig.setDbType(DbType.MYSQL);

        // 添加数据源配置
        autoGenerator.setDataSource(dataSourceConfig);

        // 3.包相关配置
        PackageConfig packageConfig = new PackageConfig();
        // 生成文件的包名
        packageConfig.setParent("com.jielihaofeng.springboot.shorturl");
        // 实体包名称
        packageConfig.setEntity("entity");
        // mapper包名称
        packageConfig.setMapper("mapper");
        // xml
        packageConfig.setXml("mapper");
        // service包名称
        packageConfig.setService("service");
        // service实现类包名称
        packageConfig.setServiceImpl("service.impl");
        // controller包名称
        packageConfig.setController("controller");

        // 添加包配置
        autoGenerator.setPackageInfo(packageConfig);

        // 4.策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        // 需要自动生成代码的数据库表名称  --- 原表表名 --
        strategyConfig.setInclude(new String[] {"short_url"});

        // 实体名称下划线转成驼峰
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        // 表字段名称下划线转成驼峰
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        // 是否使用lombok
        strategyConfig.setEntityLombokModel(true);
        // restful api风格控制器
        strategyConfig.setRestControllerStyle(true);
        // 添加策略配置
        autoGenerator.setStrategy(strategyConfig);

        // 执行代码自动生成
        autoGenerator.execute();
    }
}
